const fs = require('node:fs')
const path = require('node:path')
const ci = require('miniprogram-ci')

// 定义临时目录路径（根据实际生成名称调整）
const tempDir = path.join(__dirname, '825afbe4d072f685041b5edc8827fed9')

async function upload() {
  try {
  // 检查package
    const packageJsonPath = path.join(__dirname, './package.json')
    if (!fs.existsSync(packageJsonPath)) {
      throw new Error(`package.json文件不存在：${packageJsonPath}，请检查！`)
    }
    const packageJsonContent = fs.readFileSync(packageJsonPath, 'utf8')
    const packageJson = JSON.parse(packageJsonContent)

    // 检查manifest
    const manifestJsonPath = path.join(__dirname, './src/manifest.json')
    if (!fs.existsSync(manifestJsonPath)) {
      throw new Error(`manifest.json文件不存在：${manifestJsonPath}，请检查！`)
    }
    const manifestJsonContent = fs.readFileSync(manifestJsonPath, 'utf8')
    const manifestJson = JSON.parse(manifestJsonContent)

    // 检查打包配置目录
    const configJsonPath = path.join(__dirname, './src/weixin.config.json')
    if (!fs.existsSync(configJsonPath)) {
      throw new Error(`toutiao.config.json文件不存在：${configJsonPath}，请检查！`)
    }
    const configJsonContent = fs.readFileSync(configJsonPath, 'utf8')
    const configJson = JSON.parse(configJsonContent)

    // 检查构建目录
    const projectPath = path.join(__dirname, './dist/build/mp-weixin')
    if (!fs.existsSync(projectPath)) {
      throw new Error(`构建目录不存在：${projectPath}，请先执行构建命令！`)
    }

    // 检查密钥文件
    const privateKeyPath = path.join(__dirname, `./keys/private.${configJson.appid}.key`)
    if (!fs.existsSync(privateKeyPath)) {
      throw new Error(`密钥文件不存在：${privateKeyPath}`)
    }

    console.log(`***********************${configJson.name}微信小程序开始上传***********************`)

    // 初始化项目（指定自定义缓存目录）
    const project = new ci.Project({
      appid: configJson.appid,
      type: 'miniProgram',
      projectPath,
      privateKeyPath,
      cachePath: path.join(__dirname, './.temp-ci-cache'), // 自定义缓存路径
      ignores: ['node_modules/**/*'],
    })

    // 执行上传
    await ci.upload({
      project,
      version: packageJson.version,
      desc: '更新版本',
      setting: manifestJson['mp-weixin'].setting,
    })

    console.log(`${configJson.name}微信小程序上传成功`)

    // 清理临时目录（如果存在）
    if (fs.existsSync(tempDir)) {
      fs.rmSync(tempDir, { recursive: true, force: true })
      console.log('已清理临时目录:', tempDir)
    }

    process.exit(0)
  }
  catch (error) {
    console.log(`微信小程序上传失败:`, error)

    // 失败时也清理临时目录
    if (fs.existsSync(tempDir)) {
      fs.rmSync(tempDir, { recursive: true, force: true })
      console.log('已清理临时目录:', tempDir)
    }

    process.exit(1)
  }
}

upload()
